/**
 * v-copyText 复制文本内容
 * Copyright (c) 2022 ruoyi
 */
export default {
    beforeMount(el, {value, arg}) {
        if (arg === "callback") {
            el.$copyCallback = value
        } else {
            el.$copyValue = value
            const handler = () => {
                copyTextToClipboard(el.$copyValue)
                if (el.$copyCallback) {
                    el.$copyCallback(el.$copyValue)
                }
            }
            el.addEventListener("click", handler)
            el.$destroyCopy = () => el.removeEventListener("click", handler)
        }
    }
}

function copyTextToClipboard(input, {target = document.body} = {}) {
    const element = document.createElement('textarea')
    const previouslyFocusedElement = document.activeElement

    element.value = input

    // Prevent keyboard from showing on mobile
    element.setAttribute('readonly', '')

    element.style.contain = 'strict'
    element.style.position = 'absolute'
    element.style.left = '-9999px'
    element.style.fontSize = '12pt' // Prevent zooming on iOS

    const selection = document.getSelection()
    const originalRange = selection.rangeCount > 0 && selection.getRangeAt(0)

    target.append(element)
    element.select()

    // Explicit selection workaround for iOS
    element.selectionStart = 0
    element.selectionEnd = input.length

    let isSuccess = false
    try {
        isSuccess = document.execCommand('copy')
    } catch {
    }

    element.remove()

    if (originalRange) {
        selection.removeAllRanges()
        selection.addRange(originalRange)
    }

    // Get the focus back on the previously focused element, if any
    if (previouslyFocusedElement) {
        previouslyFocusedElement.focus()
    }

    return isSuccess
}
